package com.cencat.framework.file.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.cencat.framework.core.entity.TenantBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 文件信息实体类
 * 存储文件的基本信息、存储路径、权限等
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("file_info")
public class FileInfo extends TenantBaseEntity {
    
    /**
     * 文件ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    
    /**
     * 文件唯一标识
     */
    @TableField("file_key")
    private String fileKey;
    
    /**
     * 文件名称
     */
    @TableField("file_name")
    private String fileName;
    
    /**
     * 文件路径
     */
    @TableField("file_path")
    private String filePath;
    
    /**
     * 文件大小（字节）
     */
    @TableField("file_size")
    private Long fileSize;
    
    /**
     * 文件类型
     */
    @TableField("file_type")
    private String fileType;
    
    /**
     * MIME类型
     */
    @TableField("mime_type")
    private String mimeType;
    
    /**
     * 文件扩展名
     */
    @TableField("file_extension")
    private String fileExtension;
    
    /**
     * 存储配置ID
     */
    @TableField("storage_config_id")
    private Long storageConfigId;
    
    /**
     * 存储KEY
     */
    @TableField("storage_key")
    private String storageKey;
    
    /**
     * 存储URL
     */
    @TableField("storage_url")
    private String storageUrl;
    
    /**
     * MD5哈希值
     */
    @TableField("md5_hash")
    private String md5Hash;
    
    /**
     * SHA256哈希值
     */
    @TableField("sha256_hash")
    private String sha256Hash;
    
    /**
     * 是否加密
     */
    @TableField("is_encrypted")
    private Boolean encrypted;
    
    /**
     * 加密密钥
     */
    @TableField("encryption_key")
    private String encryptionKey;
    
    /**
     * 业务模块
     */
    @TableField("business_module")
    private String businessModule;
    
    /**
     * 业务ID
     */
    @TableField("business_id")
    private String businessId;
    
    /**
     * 访问级别：1-公开 2-部门 3-私有
     */
    @TableField("access_level")
    private Integer accessLevel;
    
    /**
     * 允许访问的部门ID列表
     */
    @TableField("allowed_dept_ids")
    private String allowedDeptIds;
    
    /**
     * 允许访问的用户ID列表
     */
    @TableField("allowed_user_ids")
    private String allowedUserIds;
    
    /**
     * 状态：0-删除 1-正常
     */
    @TableField("status")
    private Integer status;
    
    /**
     * 是否临时文件
     */
    @TableField("is_temporary")
    private Boolean temporary;
    
    /**
     * 过期时间
     */
    @TableField("expire_time")
    private LocalDateTime expireTime;
    
    /**
     * 上传人ID
     */
    @TableField("uploader_id")
    private Long uploaderId;
    
    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}